const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const router = express.Router();
const auth = require('../middlewares/auth');

// 服务器域名配置
const SERVER_URL = 'http://localhost:3000';  // 改为空字符串，使用相对路径

// 配置 multer 存储
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    const uploadDir = path.join(__dirname, '../../public/uploads');
    // 确保上传目录存在
    if (!fs.existsSync(uploadDir)) {
      fs.mkdirSync(uploadDir, { recursive: true });
    }
    cb(null, uploadDir);
  },
  filename: function (req, file, cb) {
    // 生成文件名: 时间戳 + 随机数 + 原始扩展名
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, uniqueSuffix + path.extname(file.originalname));
  }
});

// 文件过滤器
const fileFilter = (req, file, cb) => {
  // 只允许上传图片
  if (file.mimetype.startsWith('image/')) {
    cb(null, true);
  } else {
    cb(new Error('只允许上传图片文件！'), false);
  }
};

const upload = multer({ 
  storage: storage,
  fileFilter: fileFilter,
  limits: {
    fileSize: 5 * 1024 * 1024 // 限制5MB
  }
});

// 上传单个文件的路由
router.post('/', auth, upload.single('file'), (req, res) => {
  try {
    if (!req.file) {
      return res.json({
        code: 1,
        message: '请选择要上传的文件'
      });
    }

    // 返回文件访问URL
    const fileUrl = `${SERVER_URL}/uploads/${req.file.filename}`;
    res.json({
      code: 0,
      data: {
        url: fileUrl
      },
      message: '上传成功'
    });
  } catch (error) {
    console.error('文件上传失败:', error);
    res.json({
      code: 1,
      message: '文件上传失败'
    });
  }
});

// 头像上传接口 - 不需要鉴权
router.post('/avatar', upload.single('file'), (req, res) => {
  try {
    if (!req.file) {
      throw new Error('请选择要上传的图片');
    }
    
    // 返回完整的文件访问URL
    const fileUrl = `${SERVER_URL}/uploads/${req.file.filename}`;
    res.json({
      code: 0,
      message: '上传成功',
      url: fileUrl
    });
  } catch (error) {
    res.status(400).json({
      code: 1,
      message: error.message || '上传失败'
    });
  }
});

// 其他图片上传接口 - 需要鉴权
router.post('/image', auth, upload.single('file'), (req, res) => {
  try {
    if (!req.file) {
      throw new Error('请选择要上传的图片');
    }
    
    // 返回完整的文件访问URL
    const fileUrl = `${SERVER_URL}/uploads/${req.file.filename}`;
    res.json({
      code: 0,
      message: '上传成功',
      url: fileUrl
    });
  } catch (error) {
    res.status(400).json({
      code: 1,
      message: error.message || '上传失败'
    });
  }
});

// 错误处理中间件
router.use((error, req, res, next) => {
  if (error instanceof multer.MulterError) {
    if (error.code === 'LIMIT_FILE_SIZE') {
      return res.status(400).json({ message: '文件大小不能超过 5MB' });
    }
    return res.status(400).json({ message: error.message });
  }
  
  if (error.message === '不支持的文件类型') {
    return res.status(400).json({ message: error.message });
  }
  
  console.error('文件上传错误:', error);
  res.status(500).json({ message: '服务器错误' });
});

module.exports = router; 